﻿using System;

namespace RG.Common.WPF.Commands
{
    /// <summary>
    /// <para>Атрибут, которым должен быть помечен метод чтобы <see cref="NamedCommandBinding"/> 
    /// использовал его для выполнения CanExecute команды.</para>
    /// 
    /// <para>При этом выбирается атрибут у которого <see cref="NamedCanExecuteAttribute.Name"/> 
    /// равен <see cref="NamedCommandBinding.CommandName"/></para>
    /// </summary>
    [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
    public class NamedCanExecuteAttribute: Attribute
    {
        /// <summary>
        /// Имя команды (указанное в <see cref="NamedCommandBinding.CommandName"/>) 
        /// для которой будет выполняться CanExecute
        /// </summary>
        public string Name { get; set; }

        public NamedCanExecuteAttribute(string name)
        {
            Name = name;
        }
    }

    /// <summary>
    /// <para>Атрибут, которым должен быть помечен метод чтобы <see cref="NamedCommandBinding"/> 
    /// использовал его для выполнения Execute команды.</para>
    /// 
    /// <para>При этом выбирается атрибут у которого <see cref="NamedCanExecuteAttribute.Name"/> 
    /// равен <see cref="NamedCommandBinding.CommandName"/></para>
    /// </summary>
    [AttributeUsage(AttributeTargets.Method, Inherited = false, AllowMultiple = true)]
    public class NamedExecuteAttribute : Attribute
    {
        /// <summary>
        /// Имя команды (указанное в <see cref="NamedCommandBinding.CommandName"/>) 
        /// для которой будет выполняться Execute
        /// </summary>
        public string Name { get; set; }

        public NamedExecuteAttribute(string name)
        {
            Name = name;
        }
    }

}
